home *** CD-ROM | disk | FTP | other *** search
-
- Free Information Xchange '98 presents:
-
- Pandemonium - CD crack by Static Vengeance
-
- Requirements
- Hex editor and full install
-
- Pandemonium is a platform jumping game in simular fashion to the mario jumpers in the
- nintendo world. It's alright, but what really stands out is the graphics in the 3Dfx version,
- it looks awesome! However, as you can see from this article, it does have one problem and it
- comes in the form of a CD check. Using my favorite tool to crack Win95 programs, W32Dasm from
- URSoft, I'll show you how to defeat that check. There are two versions of the program that
- come with the CD. The file called pandy.exe is the standard program, while the file pandy3.exe
- is the 3Dfx enhanced version. It's that version I will be using for the code listings, so if
- you want to follow along you will need to use pandy3.exe also. I have included the edit for
- pandy.exe below.
- Start up W32Dasm and disassemble PANDY3.EXE from where ever it is installed. Once
- W32Dasm has finished it's process and is ready, go up to the title bar select "Refs" and choose
- "String data references". From here grab the slider bar and scroll down looking to the string
- "The Pandemonium CD must be in " You did run the program once without the CD in to see how it
- asked for it, right? To continue, double click on the string and it puts you in the middle of
- the CD check routine. So let's take a look at the code and see what it does:
-
- * Referenced by a CALL at Address:
- |:00436015 <-- who made the call
- |
- :00427C60 A1FCB14600 mov eax, dword ptr [0046B1FC]
- :00427C65 85C0 test eax, eax
- :00427C67 741C je 00427C85
- :00427C69 E8324EFEFF call 0040CAA0
-
- * Possible StringData Ref from Data Obj ->"The Pandemonium CD must be in " <-- Don't want to
- ->"the CD-ROM drive before you can " <-- ever see this
- ->"play."
- |
- :00427C6E 6810CC4600 push 0046CC10
- :00427C73 E878000000 call 00427CF0
- :00427C78 83C404 add esp, 00000004
- :00427C7B 6A00 push 00000000
-
- * Referenced by a (U)nconditional or (C)onditional Jump at Address:
- |:00427C39(C)
- |
- :00427C7D E89E3D0300 call 0045BA20
- :00427C82 83C404 add esp, 00000004
-
- * Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
- |:00427C41(C), :00427C67(C)
- |
- :00427C85 C3 ret
-
- That's one short and straight forward routine. So let's check the caller, the above
- routine is called once from 436015. However that section of code is in a routine short
- enough to list out the entire routine. Listing this code reveals:
-
- * Referenced by a CALL at Addresses:
- |:00407084 , :004070D7 , :004071F3 , :0040727E , :004072CC
- |:00407319 , :004073A5 , :00407E94 , :00407EEC , :00407F6F
- |:00408AE4 , :0040F655 , :0040F82B , :0040F8D7 , :00435F31
- |:0044154F , :00441567 , :0045151C
- |
- :00436010 83EC04 sub esp, 00000004
- :00436013 53 push ebx
- :00436014 56 push esi
- :00436015 E8461CFFFF call 00427C60 <-- Prints insert the CD stuff
- :0043601A A164E05900 mov eax, dword ptr [0059E064]
- :0043601F 85C0 test eax, eax
- :00436021 741D je 00436040 <-- Force this jump to contiune
-
- * Reference To: KERNEL32.Sleep, Ord:023Ah <-- This doesn't look good!!!
- | <-- We want to skip this part...
- :00436023 8B35B8B48100 mov esi, dword ptr [0081B4B8]
-
- * Referenced by a (U)nconditional or (C)onditional Jump at Address:
- |:0043603E(C)
- |
- :00436029 6A64 push 00000064
- :0043602B FFD6 call esi
- :0043602D E8AE000000 call 004360E0
- :00436032 E8591CFFFF call 00427C90
- :00436037 A164E05900 mov eax, dword ptr [0059E064]
- :0043603C 85C0 test eax, eax
- :0043603E 75E9 jne 00436029
-
- * Referenced by a (U)nconditional or (C)onditional Jump at Address: <-- Getting here continues the game
- |:00436021(C)
- |
- :00436040 8B442410 mov eax, dword ptr [esp+10]
- :00436044 8A4C2418 mov cl, byte ptr [esp+18]
- :00436048 A35CE05900 mov dword ptr [0059E05C], eax
- :0043604D 84C9 test cl, cl
- :0043604F 7424 je 00436075
- :00436051 8B742414 mov esi, dword ptr [esp+14]
- :00436055 56 push esi
- :00436056 E8150A0000 call 00436A70
- :0043605B C70564E0590000000000 mov dword ptr [0059E064], 00000000
- :00436065 83C404 add esp, 00000004
- :00436068 83F801 cmp eax, 00000001
- :0043606B 1BC0 sbb eax, eax
- :0043606D 23C6 and eax, esi
- :0043606F 5E pop esi
- :00436070 5B pop ebx
- :00436071 83C404 add esp, 00000004
- :00436074 C3 ret
-
- First off, there are too many calls to this section of code to trace each one and
- determine which is/are responsible for the CD check directly. So, instead we'll make our
- edit to this section of code. Alright, what do we need to do to make a runnable version
- without the CD in the drive? Let's see, first we don't want the call to the "insert CD"
- routine to be taken so we'll NOP it out. Next you have to force the conditional jump at
- 00436021 to always be taken. This is done by changing it from je (jump equal) to jmp
- (unconditional jump). Seems fairly simple with a little help, doesn't it? The actual
- edits to be made are as follows:
-
-
- Edit PANDY.EXE (standard version) at offset 189,925
- =====================================================
- Search for: E8 F6 3B 01 00 A1 D4 2B 59 00 85 C0 74 1D
- Change to : 90 90 90 90 90 -- -- -- -- -- -- -- EB --
-
- Edit PANDY3.EXE (3Dfx version) at offset 218,133
- =====================================================
- Search for: E8 46 1C FF FF A1 64 E0 59 00 85 C0 74 1D
- Change to : 90 90 90 90 90 -- -- -- -- -- -- -- EB --
-
- It goes without saying that you loose the CD music, Logos and intros AVI's and when you
- finish the game you don't see the finishing AVI (outros.avi). However when the CD is present
- the program will make use of it.
-
- Not too hard to FiX Pandemonium was it?
-
- Static Vengeance
-
- Cheat code for 14 ankhs, 8 hearts, any level and special weapon:
- ------------------------
- AOIMFPIJ Fire
- AOEMDPIJ Ice
- AOMMHPIJ Shrinker
-